// 导入db
const db = require("../db/index")

// 导入解密码的中间件
const bcrypt = require("bcrypt")

// 用户信息的路由处理函数集合



// 注意：req 对象上的 user 属性，是 Token 解析成功，express-jwt 中间件帮我们挂载上去的
// 获取用户信息
exports.getUserInfo = (req, res) => {
    // sql语句用id去查询对应的用户属性 注意不要查密码,防止泄露
    const sqlStr = 'select id,username,nickname,email,user_pic from ev_users where id = ?'

    // 进行查询操作
    db.query(sqlStr, req.user.id, (err, result) => {
        // 查询失败
        if (err) return res.cc(err)
        // 查询结果数据不是一个,不正常，也报错
        if (result.length !== 1) return res.cc("获取用户信息失败")
        // 查询正确返回查询结果给客户端
        res.send({
            status: 200,
            message: "获取用户信息成功",
            data: result[0],
        })
    })
}

// 更新用户信息
exports.updateUserInfo = (req, res) => {
    // 更新数据库的更新语句
    const sqlStr = 'update ev_users set ? where id = ?'
    // 执行改sql语句
    db.query(sqlStr, [req.body, req.body.id], (err, result) => {
        // 执行sql语句失败
        if (err) return res.cc(err)
        // sql语句执行成功但是影像的结果不是一个.
        if (result.affectedRows !== 1) return res.cc("修改用户基本信息失败！")
        res.cc(200, "修改基本信息成功")
    })
}

// 重设密码
exports.updatePwd = (req, res) => {
    // 查询对应id的用户是否存在
    // sql语句
    const sqlStr = 'select * from ev_users where id = ?'
    // 进行sql查询
    db.query(sqlStr, req.user.id, (err, result) => {
        // sql查询失败
        if (err) return res.cc(err)
        // 查询结果不是一个
        if (result.length !== 1) return res.cc("用户不存在！")
        // 判断用户的旧密码是否正确
        const compareResult = bcrypt.compareSync(req.body.oldPwd, result[0].password)
        if (!compareResult) return res.cc("原密码错误，请重新输入")
        // 判断该id是否存在
        const updatePwdSqlStr = 'update ev_users set password = ? where id = ?'
        // 对新密码进行加密.
        const newPwd = bcrypt.hashSync(req.body.newPwd, 10)
        // sql语句替换数据库的新密码.
        db.query(updatePwdSqlStr, [newPwd, req.user.id], (err, result) => {
            // sql查询失败
            if (err) return res.cc(err)
            // 如果影响的行数不是一个,报错
            if (result.affectedRows !== 1) return res.cc("更新密码失败")
            res.cc(200, "更新密码成功！")
        })
    })
}

// 更新用户头像.
exports.updateAvatar = (req, res) => {
    // 更新用户图片地址的sql语句
    const sqlStr = 'update ev_users set user_pic = ? where id = ?'
    // 执行sql语句
    db.query(sqlStr, [req.body.avatar, req.user.id], (err, result) => {
        if (err) res.cc(err)
        if (result.affectedRows !== 1) res.cc("更新用户头像失败")
        res.send(200, "更新用户头像成功")
    })
}